from .models import WordEntry

# https://cs.wiktionary.org/wiki/Modul:Priznaky/seznam
LABEL_TAGS = {
    "v Americe": "US",
    "argot": "slang",
    "archaicky": "archaic",
    "básnicky": "poetic",
    "bavorský výraz": "Bavarian",
    "biblický výraz": "Biblical",
    "cirkusový slang": "slang",
    "častěji": "often",
    # "částečně": "partially",
    "v Čechách": "Bohemia",
    "dětsky": "childish",
    "divadelní slang": "slang",
    "dokonavé": "perfective",
    # "domácky": "",
    "dopravní slang": "slang",
    "doslovně": "literary",
    "drogový slang": "slang",
    # "dříve": "formerly",
    "eufemisticky": "euphemistic",
    "expresivně": "expressively",
    "familiárně": "familiar",
    "formálně": "formally",
    "hanlivě": "derogatory",
    # "brněnský hantec": "",
    "historicky": "historical",
    "hornický slang": "slang",
    "horolezecký slang": "slang",
    "hovorově": "colloquially",
    "muzikantský slang": "slang",
    "hyperonymum": "hypernym",
    "hyponymum": "hyponym",
    "internetový slang": "slang",
    "intranzitivní": "intransitive",
    "ironicky": "ironic",
    "karetní slang": "slang",
    "knižně": "literary",
    "kriminální slang": ["criminal-slang", "slang"],
    "křesťanský slang": ["Christian", "slang"],
    "latinsky": "Latin",
    "slang mládeže": "slang",
    "v plurálu": "plural",
    "v moderním kontextu": "modern",
    "na Moravě": "Moravia",
    "motoristický slang": "slang",
    "myslivecký slang": "slang",
    "slang námořníků": "slang",
    "nářečně": "dialectal",
    "nedokonavé": "imperfect",
    "neformálně": "informal",
    "neologismus": "neologism",
    "jen neosobní": "impersonal",
    "nepočitatelné": "uncountable",
    # "nepřesně": "",
    "nesprávně": "incorrectly",
    "neutrálně": "neutral",
    # "nezvratné": "",
    # "v obecném jazyce": "",
    "oblastně": "regional",
    "obrazně": "figuratively",
    # "odborně": "",
    # "okazionalismus": "",
    "pejorativně": "pejorative",
    "počitatelné": "countable",
    "policejní slang": "slang",
    "pomnožné": "multiplicative",
    "poněkud zastarale": "outdated",
    "pražský výraz": "Prague",
    "přechýleně": "oblique",
    "přeneseně": "figuratively",
    # "přibližně": "",
    "v Rakousku": "Austria",
    "řemeslnický slang": "slang",
    "v širším slova smyslu": "broadly",
    "v užším slova smyslu": "narrowly",
    "slangově": "slang",
    "v současnosti": "present",
    "současným pravopisem": "contemporary",
    "spisovné skloňování": "literary",
    "sportovní slang": "slang",
    "starým pravopisem": "archaic",
    "staročesky": "Old-Cezch",
    "studentský slang": "slang",
    "technický slang": "slang",
    "televizní slang": "slang",
    "trampský slang": "slang",
    "tranzitivní": "transitive",
    "vězeňský slang": "slang",
    "vodácký slang": "slang",
    "vojenský slang": "slang",
    "vulgárně": "vulgar",
    # "vznešeně": "noble",
    # "xenofobní výraz": "",
    "z angličtiny": "English",
    "zastarale": "obsolete",
    "zdravotnický slang": "slang",
    "zdrobněle": "diminutive",
    "zkráceně": "abbreviation",
    "zkratkou": "abbreviation",
    "zřídka": "rare",
    "zveličele": "exaggerated",
    "zvratné": "reflexive",
    "železničářský slang": "slang",
    "žertovně": "humorous",
    "židovský slang": ["Jewish", "slang"],
    "ambitranzitivní": "ambitransitive",
}

GENDER_TAGS = {
    "mužský": "masculine",
    "životný": "animate",
    "neživotný": "inanimate",
    "femininum (ženský rod)": "feminine",
    "ženský": "feminine",
    "ženský rod": "feminine",
    "neutrum (střední rod)": "neuter",
    "střední": "neuter",
    "střední rod": "neuter",
    "maskulinum (mužský rod)": "masculine",
    "mužský rod": "masculine",
    # "všechny rody": "",
}

TABLE_TAGS = {
    # Šablona:Substantivum_(cs)
    "jednotné": "singular",
    "množné": "plural",
    "nominativ": "nominative",
    "genitiv": "genitive",
    "dativ": "dative",
    "akuzativ": "accusative",
    "vokativ": "vocative",
    "lokál": "locative",
    "instrumentál": "instrumental",
    # Šablona:Adjektivum_(cs)
    "mužský\nživotný": ["masculine", "animate"],
    "mužský\nneživotný": ["masculine", "inanimate"],
    # Šablona:Stupňování_(cs)
    "pozitiv": "positive",
    "komparativ": "comparative",
    "superlativ": "superlative",
    # Šablona:Sloveso_(cs)
    "Oznamovací způsob": "indicative",
    "číslo jednotné": "singular",
    "číslo množné": "plural",
    "1.": "first-person",
    "2.": "second-person",
    "3.": "third-person",
    "přítomný čas": "present",
    "Rozkazovací způsob": "imperative",
    "číslo\njednotné": "singular",
    "Příčestí": "participle",
    "mužský životný\ni neživotný": ["masculine", "animate", "inanimate"],
    "mužský neživotný\na ženský": ["masculine", "animate", "feminine"],
    "činné": "active",
    "Přechodníky": "transgressive",
    "ženský\nstřední": ["feminine", "neuter"],
    "mužský\nženský\nstřední": ["masculine", "feminine", "neuter"],
    "přítomný": "present",
    # Šablona:Sloveso_(de)
    "Indikativ": "indicative",
    "aktivum": "active",
    "singulár": "singular",
    "plurál": "plural",
    "prézens": "present",
    "préteritum": "preterite",
    "perfektum": ["present", "perfect"],
    "plusquamperfektum": ["past", "perfect"],
    "futurum 1": "future-i",
    "futurum 2": "future-ii",
    "konjunktiv I": "conjunctive-i",
    "konjunktiv II": "conjunctive-ii",
    "Imperativ": "imperative",
    "Infinitiv": "infinitive",
    "Příčestí činné (přítomné)": ["active", "participle", "present"],
    "silná": "strong",
    "slabá": "weak",
    "smíšená": "mixed",
    # Template:Adjektivum (nl) skloňování
    "společný": "common",
    "střední": "neuter",
    # Template:Adjektivum (nl) stupňování
    "neurčitý": "indefinite",
    "určitý": "definite",
    "Komparativ": "comparative",
    "Superlativ": "superlative",
    # Template:Sloveso (en)
    "infinitiv": "infinitive",
    "3. osoba": "third-person",
    "vid průběhový": ["present", "progressive"],
    # Template:Sloveso (fr)
    "Číslo jednotné": "singular",
    "Číslo množné": "plural",
    "1. je (j')": "first-person",
    "2. tu": "second-person",
    "3. il / elle": "third-person",
    "1. nous": "first-person",
    "2. vous": "second-person",
    "3. ils / elles": "third-person",
    "Jednoduché\nčasy": "simple",
    "Prézens": "present",
    "Imperfektum": "imperfect",
    "Passé simple": "past",
    "Futurum I": "future-i",
    "Složené\nčasy": "compound",
    "Passé composé": ["past", "compound"],
    "Plusquamperfektum": ["past", "perfect"],
    "Passé antérieur": ["past", "anterior"],
    "Futurum II": "future-ii",
    "Spojovací způsob": "subjunctive",
    "1. que je (j')": "first-person",
    "2. que tu": "second-person",
    "3. qu'il / elle": "third-person",
    "1. que nous": "first-person",
    "2. que vous": "second-person",
    "3. qu'ils / elles": "third-person",
    "Passé": "past",
    "Podmiňovací způsob": "conditional",
    "Číslo\n jednotné": "singular",
    "Přechodník": "transgressive",
    # Template:Sloveso (es)
    "způsob oznamovací": "indicative",
    "souminulý čas": "past",
    "minulý čas dokonavý": ["past", "perfective"],
    "budoucí čas": "future",
    "podmiňovací": "conditional",
    "způsob spojovací": "connective",
    "souminulý čas (ra)": "past",
    "souminulý čas (se)": "past",
    "způsob rozkazovací": "imperative",
    "kladný": "affirmative",
    "záporný": "negative",
    "neosobní tvary": "impersonal",
    "gerundium": "gerund",
    "příčestí": "participle",
    "příčestí minulé": ["past", "participle"],
    # Template:Sloveso (sv)
    "pasivum": "passive",
    "přítomnost": "present",
    "supinum": "supine",
    "rozkazovací zp.": "imperative",
    "přítomné": "present",
    "trpné": "passive",
    "plurál/\nurč. tvar": "plural",
}

SOUND_TAGS = {
    "Pinyin": "Pinyin",
    "Bopomofo": "Bopomofo",
    "bopomofo": "Bopomofo",
    "hiragana": "hiragana",
    "romaji": "Rōmaji",
    "Jyutping": "Jyutping",
}


TAGS = {**LABEL_TAGS, **GENDER_TAGS, **TABLE_TAGS, **SOUND_TAGS}

TOPICS = {
    "v alchymii": "alchemy",
    "v anatomii": "anatomy",
    "v antropologii": "anthropology",
    "v archeologii": "archaeology",
    "v architektuře": "architecture",
    "v astrologii": "astrology",
    "v bankovnictví": "banking",
    "v basketbalu": "basketball",
    "v biochemii": "biochemistry",
    "v biologii": "biology",
    "v botanice": "botany",
    "v buddhizmu": "Buddhism",
    "církevní": "ecclesiastical",
    "cirkusový slang": "circus",
    "v cukrovarnictví": "sugar-making",
    "v diplomacii": "diplomacy",
    "v dopravě": "transport",
    "dopravní slang": "transport",
    "drogový slang": "drugs",
    "v ekologii": "ecology",
    "v ekonomii": "economics",
    "v elektrotechnice": "electrical-engineering",
    "v energetice": "energy",
    "v entomologii": "entomology",
    "v epidemiologii": "epidemiology",
    # "v estetice": "",
    "v etnografii": "ethnography",
    "v lékárenství": "pharmacy",
    "ve filmu": "film",
    "ve filosofii": "philosophy",
    "ve finančnictví": "finance",
    "ve folklóru": "folklore",
    "ve fotografii": "photography",
    "ve fyzice": "physics",
    "ve fyziologii": "physiology",
    "v gastronomii": "gastronomy",
    "v genetice": "genetics",
    "v geodézii": "geodesy",
    "v geologii": "geology",
    "v geometrii": "geometry",
    "v historii": "history",
    "v ledním hokeji": "ice-hockey",
    "v hornictví": "mining",
    "hornický slang": "mining",
    "horolezecký slang": "mountaineering",
    "v hudbě": "music",
    "muzikantský slang": "music",
    "v hutnictví": "metallurgy",
    # "chatovací zkratka": "",
    "v chemii": "chemistry",
    # "v chodském nářečí": "",
    "v ichtyologii": "ichthyology",
    "v informatice": "computer-science",
    "internetový slang": "Internet",
    "v islámu": "Islam",
    "v jazykovědě": "linguistics",
    "v jaderné fyzice": "nuclear-physics",
    # "v kartářství": "",
    "v karetních hrách": "card-games",
    "karetní slang": "card-games",
    "keramika": "ceramics",
    "v knihovnictví": "librarianship",
    "v komunikaci": "communications",
    "v konspiračních teoriích": "conspiracy",
    # "v koželužství": "",
    "v krejčovství": "tailor",
    "v křesťanství": "Christianity",
    # "v kvalitářství": "",
    # "v kybernetice": "",
    "v lesnictví": "forestry",
    "v letectví": "aviation",
    "v lexikologii": "lexicology",
    "v literatuře": "literature",
    "v logice": "logic",
    "v loďařství": "shipbuilding",
    "v matematice": "mathematics",
    "v lékařství": "medicine",
    "v meteorologii": "meteorology",
    "v mezinárodním právu": "law",
    "v mineralogii": "mineralogy",
    "v mykologii": "mycology",
    "myslivecký slang": "hunting",
    "v mytologii": "mythology",
    "v náboženství": "religion",
    "v obchodním styku": "business",
    "v obuvnictví": "shoemaking",
    "v optice": "optics",
    "v pedagogice": "education",
    "v pivovarnictví": "brewing",
    "v plavbě": "sailing",
    "v pojišťovnictví": "insurance",
    "v politice": "politics",
    "policejní slang": "police",
    "v polygrafii": "printing",
    "v poštovnictví": "mail",
    "v potravinářství": "food",
    "v právu": "law",
    "v psychologii": "psychology",
    "v publicistice": "journalism",
    "v prostředí obchodu s nemovitostmi": "real-estate",
    "v rybářství": "fishing",
    "v římském právu": "law",
    "sexualita": "sexuality",
    "v sklářství": "glassmaking",
    "v sociologii": "sociology",
    "současným pravopisem": "orthography",
    "ve sportu": "sports",
    "sportovní slang": "sports",
    "ve statistice": "statistics",
    "ve stavebnictví": "construction",
    "ve stylistice": "stylistics",
    "v šermu": "fencing",
    "v technice": "technology",
    "technický slang": "technical",
    "televizní slang": "television",
    "v teologii": "theology",
    "v textilnictví": "textiles",
    "v truhlářství": "carpentry",
    "v typografii": "typography",
    "v umění": "arts",
    "v urbanismu": "urbanism",
    "ve včelařství": "beekeeping",
    "ve veterinářství": ["veterinary", "medicine"],
    "vězeňský slang": "prison",
    "vodácký slang": "boating",
    "v vodním stavitelství": ["hydraulics", "engineering"],
    "ve vojenství": "military",
    "vojenský slang": "military",
    "ve výpočetní technice": "computer-sciences",
    "ve vulkanologii": "volcanology",
    "ve výtvarnictví": "arts",
    "v zahradnictví": "horticulture",
    "zdravotní": "health",
    "zdravotnický slang": "medicine",
    "v zemědělství": "agriculture",
    "v geografii": "geography",
    "v zoologii": "zoology",
    "ve zvukařství": "sound-engineering",
    "železničářský slang": "railways",
    "žurnalisticky": "journalism",
}


def translate_raw_tags(data: WordEntry) -> None:
    raw_tags = []
    for raw_tag in data.raw_tags:
        found_tag = False
        if raw_tag in TAGS and hasattr(data, "tags"):
            found_tag = True
            tr_tag = TAGS[raw_tag]
            if isinstance(tr_tag, str) and tr_tag not in data.tags:
                data.tags.append(tr_tag)
            elif isinstance(tr_tag, list):
                for tag in tr_tag:
                    if tag not in data.tags:
                        data.tags.append(tag)
        if raw_tag in TOPICS and hasattr(data, "topics"):
            found_tag = True
            topic = TOPICS[raw_tag]
            if isinstance(topic, str) and topic not in data.topics:
                data.topics.append(topic)
            elif isinstance(topic, list):
                for t in topic:
                    if t not in data.topics:
                        data.topics.append(t)
        if not found_tag:
            raw_tags.append(raw_tag)
    data.raw_tags = raw_tags
